<?php

namespace service\service;

use service\ext\PageData;
use service\vo\user\UserSubjectStatic;

interface UserSubjectStaticService
{
    const ERROR_USER_ID = 'ERROR_USER_ID';  //用户id必传
    const ERROR_DATA_NOT_EXISTS = 'ERROR_DATA_NOT_EXISTS';
    /**
     * 添加用户练习题目统计
     * @param UserSubjectStatic $userSubjectStatic 用户练习题目统计对象
     * @return int 新增加的id
     */
    public function addUserSubjectStatic(UserSubjectStatic $userSubjectStatic) : int;

    /**
     * 自增用户练习题目统计次数
     * @param int $userId   用户id
     * @param int $subjectId    题目id
     * @param int $times    增加的次数，一般为1
     * @return int 影响的行数
     *
     * @see
     *  同时修改最后编辑时间为当前时间
     */
    public function increaseUserSubjectStatic(int $userId, int $subjectId, int $times) : int;

    /**
     * 根据用户id和题目id获取统计详情
     * @param int $userId   用户id
     * @param int $subjectId    题目id
     * @return UserSubjectStatic    统计对象
     */
    public function getUserSubjectStaticByUserIdAndSubjectId(int $userId, int $subjectId) : UserSubjectStatic;

    /**
     * 批量获取用户下题目统计
     * @param int $userId   用户id
     * @param array $subjectIds 题目id集合
     * @return array    题目统计集合
     */
    public function getUserSubjectStaticByUserIdAndSubjectIds(int $userId, array $subjectIds) : array;

    /**
     * 搜索用户题目统计
     * @param int $currentPage 当前页
     * @param int $pageSize 每页显示数量
     * @param array $filterCriteria //搜索条件数组，其中的value是搜索值，其中的key从下面字符串中取
     *        'UserId'            =>    用户id
     *        'SubjectId'            =>    题目id
     * @param array $sorterCriteria //排序条件，其中的value是搜索值，其中的key从下面字符串中取
     *        'ID'    =>    true为升序false为降序
     *
     * @return PageData
     */
    public function searchUserSubjectStatic(int $currentPage, int $pageSize, array $filterCriteria, array $sorterCriteria): PageData;
}